﻿#pragma once

#include "GxIAPI.h"
#include "DxImageProc.h"
#include <stdio.h>
#include <stdlib.h>

#include <opencv2/opencv.hpp>


#define VERIFY_STATUS(emStatus) \
                                   if ((emStatus) != GX_STATUS_SUCCESS) \
                                   {\
                                        LOG(ERROR) << (emStatus) << std::endl; \
                                   }\

typedef struct _dh_camera_link_{
    int access;
    std::string address;
    int exposure;

}CameraDH_Link;


class Camera_DH
{

public:
	Camera_DH();
	~Camera_DH();

    bool openDevice(CameraDH_Link &left, CameraDH_Link &right);
	void closeDevice();

    bool is_connected(int idx);

    bool capture_colorIMG(int idx, cv::Mat &img);

private:

    GX_DEV_HANDLE  m_hDevice[2];			// 设备句柄
    bool           m_bIsOpen[2];           // 设备打开状态
    bool           m_bIsSnap[2];           // 发送开采命令标识
    BITMAPINFO*    m_pBmpInfo[2];          // 用来显示图像的结构指针
    char           m_chBmpBuf[2][2048];    // BIMTAPINFO 存储缓冲区，m_pBmpInfo即指向此缓冲区
    int64_t        m_nImageWidth[2];       // 原始图像宽
    int64_t        m_nImageHeight[2];      // 原始图像高
    int64_t        m_nPixelColorFilter[2]; // Bayer格式
    int64_t        m_nPayLoadSize[2];      // 原始Raw图像大小
    bool           m_bIsColorFilter[2];    // 是否支持输出彩色图像

    int            m_accessStatus[2];

    BYTE* m_pImgBuffer[2];                 // 指向经过处理后的图像数据缓冲区
    GX_FRAME_DATA  m_stFrameData[2];       // GetImage获取的图像地址


    int initDevice(int idx, bool autoBalance, double exposure = 100000);
	//int setPixelFormat8bit();
    int getDeviceInitParam(int idx);
    int prepareForImg(int idx);

    bool  getImgBySoftTrigger(int idx);         // software trigger

    int exposure[2];
};
